package com.example.deepseekwebsocket.vo.response;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * @Author：菜鸟Lm
 * @Version：1.0
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DeepSeekChatResponse {

    /**
     * 响应的唯一标识符
     */
    private String id;

    /**
     * 对象类型，例如 "chat.completion"
     */
    private String object;

    /**
     * 创建聊天完成时的 Unix 时间戳（以秒为单位
     */
    private long created;

    /**
     * 使用的模型名称
     */
    private String model;

    /**
     * 包含聊天选择的列表
     */
    private List<Choice> choices;

    /**
     * 使用情况统计
     */
    private Usage usage;

    /**
     * 系统指纹
     */
    private String system_fingerprint;


    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class Choice {
        /**
         * 选择的索引
         */
        private int index;

        /**
         * 消息对象
         */
        private Message message;

        /**
         * 完成原因
         */
        private String finish_reason;
    }

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class Message {
        /**
         * 角色
         */
        private String role;

        /**
         * 内容
         */
        private String content;
    }

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class Usage {
        /**
         * 用户 prompt 所包含的 token 数。该值等于 prompt_cache_hit_tokens + prompt_cache_miss_tokens
         */
        private int prompt_tokens;

        /**
         * 模型 completion 产生的 token 数
         */
        private int completion_tokens;

        /**
         * 该请求中，所有 token 的数量（prompt + completion）
         */
        private int total_tokens;

        /**
         * 提示词token的详细信息
         */
        private PromptTokensDetails prompt_tokens_details;

        /**
         * 用户 prompt 中，命中上下文缓存的 token 数
         */
        private int prompt_cache_hit_tokens;

        /**
         * 用户 prompt 中，未命中上下文缓存的 token 数
         */
        private int prompt_cache_miss_tokens;
    }

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class PromptTokensDetails {
        /**
         * 推理模型所产生的思维链 token 数量
         */
        private int cached_tokens;
    }
}
